#ifndef _BENCHMARKS_H
#define _BENCHMARKS_H



	int next(int bits);
	int nextInt(int n);
	double nextDouble();
	double nextGaussian();
	unsigned ID;
	double* createShiftVector(int dim, double min,double max);
	int* createPermVector(int dim);
	double** createRotMatrix(int dim);
	double* createRotMatrix1D(int dim);
	double** createMultiRotateMatrix1D(int dim, int num);

	double* lookupprepare(int dim);

	// Basic mathematical functions' declaration
	double* multiply(double*vector, double*matrix,int dim);
	double elliptic(double*x,int dim,double *lookup);
	double elliptic2(double*x, int dim, int k);
	double rastrigin(double*x,int dim);
	double rastrigin2(double *x, int dim, int k);
	double ackley(double*x,int dim);
	double ackley2(double*x,int dim, int k);
	double rot_elliptic(double*x,int dim);
	double rot_elliptic2(double*x,int dim, int k);
	double rot_rastrigin(double*x,int dim);
	double rot_rastrigin2(double *x,int dim,int k);
	double rot_ackley(double*x,int dim);
	double rot_ackley2(double*x,int dim,int k);
	double schwefel(double*x,int dim);
	double schwefel2(double*x,int dim, int k);
	double sphere(double*x,int dim);
	double sphere2(double*x,int dim, int k);
	double rosenbrock(double*x,int dim);
	double rosenbrock2(double*x,int dim, int k);
	unsigned convertMatrixToArrayIndex ( unsigned i, unsigned j );
	void createIndexMapping (  ); 


#endif
